package com.example.redisstudy.random;

import java.util.BitSet;
import java.util.Random;

public class MissingNumbers {
    public static void main(String[] args) {
        int totalNumbers = 10000000; // 1千万个随机数
        int range = 100000000; // 随机数范围在1到1亿之间

        BitSet bitSet = new BitSet(range);
        Random random = new Random();

        // 生成1千万个随机数并在BitSet中标记
        for (int i = 0; i < totalNumbers; i++) {
            int randomNumber = random.nextInt(range) + 1;
            bitSet.set(randomNumber);
        }

        // 找出1到1亿之间没有出现在随机数中的数
        for (int i = 1; i <= range; i++) {
            //举个例子，如果调用BitSet#set(10)，业务语意是把10放到BitSet中，内部的操作则是通过把二进制的第十位（低位）置为1。这样，就代表BitSet中包含了10这个数字。
            if (!bitSet.get(i)) {
                System.out.println(i);
            }
        }
    }
}
